Сложни Изгледи

Previous 

Търси използвайки сложна функция

Имаме същата таблица Roads („Пътища“) като в примера горе и атрибутна таблица GasStations („Газ Станции“), свързана с точки. Искаме да намерим пътища с повече от 1 станция за километър.

Първо трябва да дефинираме изгледа, който ще бъде използван в диалоговия прозорец „Търси“. Основното редово множество е таблицата Roads , а допълнителното – таблицата GasStations. Изразът за съвпадение може да се дефинира като:

and (aux.Propane, distance (object(), aux.object()) 100*m())

Тук Propane е името на колоната от Булев тип, т.е. търсим единствено газ станции, където има такова гориво. Първият път функцията object() няма префикс, което означава, че основното редово множество с обекти е това по подразбиране. Изразът „Където“ може да бъде дефиниран като:

true()

Това означава, че всички пътища са включени в новия изглед. Изразите „Колони“ липсват, но не се нуждаем от колони в новия изглед. Диалоговия прозорец „Търси“ е свързан със създадения изглед. Целевия изглед е:

count() / km(length()) > 1

Търси използвайки лупа

Предишния пример има сериозен недостатък. За да изградите решетка на съвпадение,всички двойки редове от таблиците Roads и GasStations ще бъдат претърсени. Но всъщност, доста малко станции имат гориво пропан – ще бъде по – бързо да откриете всички такива станции.

Ще решим задачата в две стъпки:

1) Изградете обикновен изглед PropaneStations, съдържащ единствено газ станции с опция за пропан. Основното редово множество е таблицата GasStations. Изразът „Където“ е Propane. Не са необходими изрази за „Колони“.

2) Втората стъпка е близка до примерната горе. Основното редово множество е също таблицата Roads, допълнителното е изгледа PropaneStations. Изразът за съответствието е:

distance (object(), aux.object()) 100*m()

Изразът „Където“ е също true(). По – нататък действията са като в примера горе.

Табличен изглед чрез сложна функция от двата вида

Продължаваме предишния пример, като искаме да изградим същия изглед, но удължен с две нови стойности: брой станции на километър за всеки път и общо.

Главното редово множество е таблицата Roads, допълнителното -  изгледа PropaneStations. Изразът за съвпадение е:

distance (object(), aux.object()) 100*m()

Изразът „където“ е:

width 10*m()

Изразите „колони“ са:

km(length())

width

km(main.sum(length()))

count() / km(length())

sum(count()) / main.sum(km(length()))

Забележете, че main. е необходимо два пъти. В противен случай, изразът sum(km(length())) ще има абсолютно различно значение и странно: общатата дължина на всички станции близо до текущия път. Станциите са точки, а тяхната дължина е изчислена като NULL и този изразът ще бъде изчислен също като NULL..

Изглед на БД за получаване на всички точки в полигон

Този пример е по-сложен. Първо трябва да дефинираме обобщен изглед изглед (вижте Изгледи в бази данни - Обобщени изгледи ). Този изглед е базиран върху две системни таблици (виж Вътрешна База данни на обектите ): ‘*Точки’ и ‘*Полигони’ и има само една колона.

Изгледа изисква условията „съответствие“ и „където“ и израз (колони):

Условието за съответствие е „вътре“ (когато търсим точки в полигон).
Условието „къде“ не е дефинирано..
Израза (колони) изчислява номера на селектираните полигони, съдържащи поне една точка:

aux.count(if(aux.selected(),1,0)

Сега селектираме полигон и изпълняваме търсене за всички заграждащи точки в диалоговия прозорец Търси:

На страницата за тип обект избираме единствено точки.
На страницата на базата данни селектираме съответния обобщен изглед и добавяме едно условие: Column > 1.

Всички точки лежащи в рамките на този полигон ще бъдат селектирани в чертежа, като полигона от своя страна ще бъде деселектиран.